1 つの集約内での整合性
from Integrity and Consistency in the Domain
集約 は 整合性 の境界
DMMF: 集約#6698b7b675d04f0000edca74
e.g. 注文の合計金額は、個々の行の合計と同じ
情報を保存するのではなく生データから計算するのが一番楽
もちろん、状況によっては追加のデータを永続化する必要がある場合もある
トップレベルの Order に AmountToBill を追加する
データの整合性を保つために、どれかの行が更新されると合計も更新する必要がある
集約は整合性の境界
code:fsharp
let changeOrderLinePrice order orderLineId newPrice =
let orderLine = order.OrderLine |> findOrderLine orderLineId
let newOrderLine = { orderLine with Price = newPrice }
let newOrderLines =
order.OrderLines |> replaceOrderLine orderLineId newOrderLine
let newAmountToBill = newOrderLines |> List.sumBy (fun line -> line.Price)
let newOrder = {
order with
OrderLines = newOrderLines
AmountToBill = newAmountToBill
}
newOrder
集約 は 永続化 の単位
DMMF: 整合性#669a074a75d04f00002ec382
Order を RDB に保存する場合、Order 自身と OrderLine の各行を同じトランザクションで挿入・更新しなければならない